জাভাস্ক্রিপ্ট টিউটোরিয়াল-শিখুন গল্পে গল্পে সাথে 1100+ Exercise

  • জাভাস্ক্রিপ্ট পরিচিতি-Introduction to JavaScript
  • প্রোগ্রামিং শুরু করতে কতটুকু গণিত লাগে?
  • প্রোগ্রামিং শুরু করতে কতটুকু ইংরেজি জানা লাগে?
  • ভালো প্রোগ্রামার কিভাবে হবো? [+৭টি গুরুত্বপূর্ণ টিপস]
  • function নো টেনশন
  • এক লিটার parameter
  • return করো: ফাংশনের প্রেম
  • ফাংশনের দংশন
  • ধাপে ধাপে ফাংশনের জংশন
  • শেষ মিশন: রিভিশন

এক লিটার parameter


Uploaded Image


এক লিটার পানি থাকলে তুই কত কী যে করতে পারবি, বলে শেষ করা যাবে না। পানি তুই সরাসরি পান করতে পারবি। সেটার মধ্যে চিনি দিয়ে শরবত বানিয়ে খেতে পারবি। পানি দিয়ে রান্না করতে পারবি। পানি দিয়ে গোসল করতে পারবি। পানি বোতলে ভরে বিক্রি করতে পারবি। সুন্দরী কেউ তৃষ্ণার্ত হলে তাকে পানি দিয়ে তার মন জোগাড় করতে পারবি। অৰ্থাৎ এক পানি দিয়ে তুই অনেক অনেক কাজ করে ফেলতে পারবি।

একইভাবে একটা ফাংশন দিয়ে চাইলে অনেক অনেক কাজ করে ফেলতে পারবি। জাস্ট ফাংশন ডিক্লেয়ার করার সময় ফাংশনের নামের পরে প্রথম ব্যাকেটের ভিতরে এক বা একাধিক নাম দিয়ে দিবি। অনেকটা ভেরিয়েবলের নাম দেয়ার মতো। তবে ভেরিয়েবল ডিক্লেয়ার করার মতো const বা let লিখবি না; বরং সরাসরি নাম দিয়ে দিবি। যদি একটা নাম লিখস, তাহলে জাস্ট নাম লিখলেই হবে। আর যদি একাধিক নাম লিখস, তাহলে নামগুলার মাঝে একটা করে কমা দিতে হবে। 



এইগুলাকে প্যারামিটার বললেও এইগুলা প্যারার কোনো মিটার সেট করবে না বা তোকে প্যারা দিবে না; বরং তোর লাইফের প্যারা কমিয়ে দিবে। তারপর ফাংশন কল করার সময় একেকবার একেক মান সেট করে এই ফাংশনকে কল করতে পারবি। 



বিষয়টা একটা উদাহরণ দিলে একদম একলিটার পানির মতো পরিষ্কার হয়ে যাবে। 



ধর, একটা ফাংশন ডিক্লেয়ার করলাম। এই ফাংশনের কাজ হবে, এইটাকে যে সংখ্যা দিবি, সেই সংখ্যাকে দ্বিগুণ করে ফেলবে। তো, এই যে দ্বিগুণ করার কাজ, এইটা কিন্তু আজীবন একটা নির্দিষ্ট সংখ্যা যেমন 5-কে সব সময় দ্বিগুণ করলে জিনিসটা ইফেক্টিভ হলো না; বরং যদি এই একই ফাংশনকে দিয়ে তুই চাইলে 5-কে দ্বিগুণ করতে পারবি। আবার মন চাইলে 442-কে দ্বিগুণ করতে পারবি। এমনকি 7892-কেও চাইলেই দ্বিগুণ করতে পারবি। অর্থাৎ মোটামুটি যেকোনো সংখাকেই তুই চাইলে দ্বিগুণ করতে পারবি। জাস্ট একটা ফাংশন দিয়ে। 


তাহলে ফাংশনের একটা সুপার পাওয়ার বুঝতে পারবি। সেই সুপার পাওয়ার দেখার জন্য সিম্পলভাবে নিচের ফাংশনটা দেখ। 


এইখানে ফাংশনের নামের পরে ব্র্যাকেটের ভিতরে number নামে একটা নাম লেখা আছে। এইটাই হচ্ছে doubleIt নামক ফাংশনের প্যারামিটার। এইটা একটা নাম দেয়া হলেও এইটার মান কিন্তু দেয়া নাই। এইটার মান হবে, যতবার এই ফাংশনকে কল করা হবে, ততবার ফাংশনের নাম লিখে প্রথম ব্র্যাকেটের ভিতরে এইটার মান সেট করে দিতে হবে।


যখন যে মান দিয়ে এই ফাংশনকে কল করা হবে, তখন সেটাই হবে এই number প্যারামিটারের (ভেরিয়েবল হিসেবেও চিন্তা করতে পারস বুঝার সুবিধার জন্য) মান। জাস্ট ফাংশনের নিচে খেয়াল করলে বুঝতে পারবি একবার, doubleIt-এর পরে 15 লেখা আছে। তারপরের লাইনে লেখা আছে doubleIt(88), মানে এইবার number ভেরিয়েবলের মান 88, আর এরপরের লাইনে লেখা আছে 873 অর্থাৎ সেইবার number প্যারামিটারের মান 873 হবে। 


  function doubleIt(number) {
    const doubled = number * 2;
    console.log(doubled); 
  }

  doubleIt(15);
  doubleIt(88);
  doubleIt(873);

Output
30
176
1746



প্যারামিটার জিনিসটাকে লুপ ভেরিয়েবলের সাথে তুলনা করতে পারস। লুপ ভেরিয়েবল তুই ডিক্লেয়ার করস। বিশেষ করে for ... of লুপের ক্ষেত্রে। সেটা লুপ চলতে চলতে একেকবার একেক মান হিসেবে আছে। এইখানেও সিমিলার ব্যাপার-স্যাপার। একটা প্যারামিটার ডিক্লেয়ার করছস। তারপর যখন যে মান দিয়ে এই ফাংশনকে কল করবি, তখন সেটাই হবে এই প্যারামিটারের মান। ব্যস, এইটুকই ঘুরিয়ে-প্যাঁচিয়ে বলতেছি। 



তাই যখন দেখবি doubleIt(15), তখন সে doubleIt ফাংশনের কাছে গিয়ে বলবে, এই নাও তোমার number প্যারামিটারের মান 15, এখন বাকি কাজ কর। তখন সে ফাংশনের ভিতরে ডুকে প্রথম লাইনেই পাবে const doubled = number * 2; এইটা দিয়ে সে number-এর মানকে 2 দিয়ে গুণ করবে। তারপর গুণফল doubled নামক একটা ভেরিয়েবলে রাখবে। এরপর সেটাকে console লগ করে আউটপুট দেখাবে। 



একইভাবে বর্গ করার একটা ফাংশন দেখাচ্ছি। বর্গ (square) মানে কোনো একটা সংখ্যাকে সেই সংখ্যা দিয়ে গুণ করলে সেটার বর্গ বা square পাওয়া যায়। 



  function square(number) {
    const borgo = number * number;
    console.log('square of', number, 'is:', borgo);
  }
  square(4);
  square(12);


Output:
square of 4 is: 16
square of 12 is: 144



ওপরের ফাংশন অলমোস্ট আগের মতোই। জাস্ট এইখানে যে প্যারামিটার নেয়া হইছে, সেটাকে সেটা দিয়েই গুণ করা হইছে। এরপর console লগ করার সময় একটু কমা দিয়ে দিয়ে কয়েকটা জিনিস কনসোল লগ করা হইছে। তুই চাইলে শুধু borgo সেটাকেই console লগ করতে পারতি। আমি জাস্ট একটু বেশি দেখায় দিলাম। 



এতক্ষণ একটা প্যারামিটার হিসেবে ফাংশন কীভাবে ডিক্লেয়ার করে, সেটা দেখছস। তবে প্যারামিটার একটা না, অনেকগুলা হতে পারে। যদি দুইটা প্যারামিটার দরকার হয়, তাহলে প্যারামিটারের জায়গায় সেই নাম দিয়ে দিবি। আমি দিলাম num1 আর num2, তারপর ফাংশনের ভিতরে এই দুইটা প্যারামিটারকে যোগ করে যোগফল sum নামে একটা ভেরিয়েবলে রাখলাম। একটু খেয়াল করলে খুব সহজভাবেই বুঝতে পারবি—



  function add(num1, num2) {
    const sum = num1 + num2;
    console.log(sum);
  }
  add(5, 71);


Output:
76



এখন দেখ, কীভাবে অনেকগুলো সংখ্যা একসাথে যোগ করা যায়:


  function addAll(a, b, c, d, e) {
    const total = a + b + c + d + e;
    console.log(total);
  }
  addAll(3, 4, 6, 7, 1);


Output:
21


ফাংশন কল করার সময় যে মান দেয়া হয়, সেগুলাকে প্যারামিটারের মান বা আর্গুমেন্টস (arguments) বলে। আমি মাঝেমধ্যে ভুলে প্যারামিটারও বলে ফেলি। তবে ফাংশন কল করার সময় প্যারামিটারের মান যে সরাসরি লিখতে হবে, এমন কোনো কথা নাই। তবে চাইলে ভেরিয়েবলও বসানো যায়। সেই উদারহণ দেখবি পিতা ও পুত্রের বয়সের পার্থক্য বের করার একটা ফাংশনে। 


  function difference(num1, num2) {
    const diff = num1 - num2;
    console.log(num1, num2, 'difference is', diff);
  }
  const fatherAge = 40;
  const myAge = 10;

  difference(fatherAge, myAge);

Output: 
40 10 'difference is' 30


এখানে যে বিষয়টা বলতেছি, তা হলো, তুই যে মানগুলো দিস, সেটা সরাসরি একটা সংখ্যা হতে পারে, আবার একটা ভেরিয়েবলও হতে পারে।


প্যারামিটার নিয়ে আর্গুমেন্ট

নিচের ফাংশনে দুইটা প্যারামিটার ডিক্লেয়ার করা হইছে। আমি যদি দুইটা প্যারামিটার দিয়ে এই ফাংশনকে কল দেই, সে দুইটার যোগফল করে রিটার্ন করে দিবে। এইটা নিয়ে কোনো সন্দেহ নাই। আমি যদি দুইটার বেশি প্যারামিটার দিয়ে এই ফাংশনকে কল করি, তাহলে সে প্রথম দুইটা প্যারামিটার নিয়ে সেটার যোগ করে আমাকে যোগফল দিবে। সেজন্য নিচে দেখতেছস, আমাকে 13 আউটপুট দিচ্ছে। যেটা প্রথম দুইটা প্যারামিটারের যোগফল। আর প্রথম দুইটা প্যারামিটার ছাড়া বাকি প্যারামিটারগুলা দিয়ে ফাংশনটাকে কল করেছি, সে বাকিগুলাকে ইগনোর করতেছে। 


  function addNumbers(a, b) {
    return a + b;
  }
  const result = addNumbers(5, 8, 9, 6);
  console.log(result);

Output: 13


এখন যদি তোর মনে হয়, কয়টা প্যারামিটার (আর্গুমেন্ট দিয়ে) ফাংশনকে কল করবে, সেটা কোনো ব্যাপার না। আমি সবগুলা পেতে চাই। তাহলে ফাংশনের ভিতরে একটা চমৎকার জিনিস আছে, সেটাকে বলে arguments, আর কোনো ফাংশনের ভিতরে arguments-কে কনসোল লগ করলে সেই ফাংশন কল করার সময় যত প্যারামিটার দেয়া হইছে, সব পেয়ে যাবি।


  function addNumbers(a, b) {
    console.log(arguments);
    return a + b;
  }
  const result = addNumbers(5, 8, 9, 6);
  console.log(result);

Output: 
[5, 8, 9, 6 ]
13


এই arguments জিনিসটা অ্যারের মতো দেখতে হলেও এইটা কোনো অ্যারে না; বরং এইটাকে বলে অ্যারের মতো দেখতে অবজেক্ট (array like object), তবে তুই চাইলে arguments-এর ওপরে for in লুপ চালাতে পারবি। এমনকি লুপ করে প্রত্যেকটা উপাদান নিয়ে কোনো কাজ করতে পারবি। যেমন, আমি নিচে সবগুলা উপাদানের যোগফল বের করতেছি। তারপর যোগফলটাকে রিটার্ন করতেছি। 


  function addNumbers(a, b) {
    let sum = 0    for(const num of arguments){
      sum = sum + num;
    }
    console.log(sum);
  }
  addNumbers(5, 8, 9, 6);

Output: 28


এই আর্গুমেন্টস নিয়ে এখন আর্গুমেন্ট বা তর্কাতর্কি করার দরকার নাই। জাস্ট দেখছস আর ভুলে যা। 


আর যেটুক ভুলবি না, সেটা হচ্ছে– ফাংশনে চাইলে এক বা একাধিক প্যারামিটার পাঠানো যায় এবং প্যারামিটারের মান চেইঞ্জ করে একই ফাংশনকে বারবার ইউজ করা যায়।


JavaScript Function Parameter Practice:

  1. পিতা ও পুত্রের বয়সের সমষ্টি বের করার একটা ফাংশন লিখ। 
  2. তোর এক বন্ধু তোকে বলল ক্যালকুলেটর বানাতে, কিন্তু ক্যালকুলেটরে শুধু যোগ বা বিয়োগ করার অপশন থাকলে হবে না। একটা ফাংশন লিখ, যেখানে দুইটা সংখ্যার গুণ বের করে দেখাস। যেমন, যদি 20 আর 15 পাঠালে আউটপুট হবে 300।
  3. একটা ফাংশন লিখ, যেটা তিনটা সাবজেক্টের পরীক্ষার মার্কসের সমষ্টি তোকে দিবে।
  4. বয়স বের করার একটা ফাংশন লিখ। যেটাকে তুই তোর কোন বছর জন্ম, সেটা বলবি। তারপর ফাংশনের ভিতরে এই বছর থেকে তোর জন্মসাল বিয়োগ করলে তোকে বলবে, তুই কত বছর বুইড়া হইছস (মানে তোর বয়স কত হইছে)।
  5. তুই একটা দোকানে গেছিস, যেখানে প্রতিটা লাউ কেনার জন্য 35 টাকা লাগবে। এখন একটা ফাংশন লিখ, যা প্যারামিটার হিসেবে নিবে, তুই লাউয়ের জন্য কত টাকা দিতে চাস। তারপর ভাগ করে বলবে, তুই কয়টা লাউ কিনতে পারবি।
  6. একটি ফাংশন লিখ, যেখানে চারটা সংখ্যার গড় বের করবে।
  7. একজন দোকানদার প্রত্যেকটা আইটেমে 250 টাকা লাভ করে। একটা ফাংশন লিখ, যেখানে কোনো একটা জিনিসের কেনা দাম দিবি, তাহলে সে বিক্রির দাম (selling price) দিবে। 
  8. একটি ফাংশন লিখ, তারপর সেই ফাংশনকে তোর জন্মসাল প্যারামিটার হিসেবে দিবি। তারপর সে বলে দিবে, কোন বছর তোর বয়স 100 বছর হবে।
  9. একটি ফাংশন লিখ, যেখানে প্যারামিটার হিসেবে দিবি, প্রতিদিন তুই কয় ঘণ্টা সময় মোবাইল ফোন ইউজ করস। তারপর সেই ফাংশন বের করবে, মাসে তুই কত ঘণ্টা সময় মোবাইল ফোন ইউজ করস। ধরে নে, এক মাসে 30 দিন হয়।


Previous PageNext Page